import java.util.*;
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 返回表达式的值
     * @param s string字符串 待计算的表达式
     * @return int整型
     */
    public int solve (String s) {

        ArrayList<Integer> ans=function(s,0);

        return ans.get(0);
    }
    private ArrayList<Integer> function(String str,int index){
        int num=0;
        char op='+';
        Stack<Integer> stack=new Stack<>();
        int i=index;
        for(;i<str.length();i++){
            char x=str.charAt(i);
            //如果是数字字符则转换成相应数字
            if(x>='0'&&x<='9'){
                num=x-'0'+num*10;
                if(i!=str.length()-1){
                    continue;
                }
            }
            //如果是左括号进入递归
            if(x=='('){
                ArrayList<Integer> res =function(str,i+1);
                //获取一对括号递归后的结果num
                num=res.get(0);
                //获取已经递归到的下标
                i=res.get(1);
                if(i!=str.length()-1){
                    continue;
                }
            }
            //遍历到操作符则进入相应的操作
            switch(op){
                case'+':
                    stack.push(num);
                    break;
                case'-':
                    stack.push(-num);
                    break;
                case'*':
                    //如果遇到*，则需要先计算
                    int temp=stack.pop();
                    stack.push(temp*num);
                    break;
            }
            //当将换算出来的数字放入栈中后，num需要重新归零
            num=0;
            if(x==')'){
                //如果遇到右括号跳出循环计算和结束递归
                break;
            }else{
                //不是数字，不是’（‘也不是’）‘
                //更新那么就是操作符，num入栈后需要更新操作符
                op=x;
            }

        }
        ArrayList<Integer> temp=new ArrayList<>();
        int sum=0;
        //将栈内所有结果相加
        while(!stack.isEmpty()){
            sum+=stack.pop();
        }
        //将本次结果放入temp
        temp.add(sum);
        //将本次的i放入temp
        temp.add(i);
        return temp;
    }
}